package controllers

import (
	"fawn/blog/common.in/utils"
	"fawn/blog/consts"
	"fawn/blog/web/dao"
	"github.com/astaxie/beego"
	"go.uber.org/zap"
)

type MainController struct {
	beego.Controller
}

// 首页
func (c *MainController) Index() {
	page, _ := c.GetInt("page", 1)
	// 公告
	notice, err := dao.NoticesDao.Info(dao.DB.Self)
	if err != nil {
		l.Error("mysql",
			zap.String("call", "dao.NoticesDao.Info"),
			zap.String("error", err.Error()))
	}
	// 友情链接
	link, err := dao.LinksDao.List(dao.DB.Self)
	if err != nil {
		l.Error("mysql",
			zap.String("call", "dao.LinksDao.List"),
			zap.String("error", err.Error()))
	}
	// 文章列表
	// 初始化分页数据
	pagination := utils.NewPagination(page, consts.CommonPageSize)
	limit, offset := pagination.GetLimitOffset()
	articles, count, err := dao.ArticleDao.List(dao.DB.Self, limit, offset)
	if err != nil {
		l.Error("mysql",
			zap.String("call", "dao.ArticleDao.List"),
			zap.String("error", err.Error()))
	} else {
		for i, i2 := range articles {
			articles[i].CreateTime = i2.CreateAt.Format(consts.Layout)
		}
	}
	// 置顶
	top, err := dao.ArticleDao.Top(dao.DB.Self)
	if err != nil {
		l.Error("mysql",
			zap.String("call", "dao.ArticleDao.Top"),
			zap.String("error", err.Error()))
	}
	// 标签列表
	tags, err := dao.TagsDao.List(dao.DB.Self)
	if err != nil {
		l.Error("mysql",
			zap.String("call", "dao.TagsDao.List"),
			zap.String("error", err.Error()))
	}

	// 分页
	pages := utils.NewPage(page, consts.CommonPageSize, count, "")

	c.Data["count"] = count
	c.Data["page"] = pages.Show()
	c.Data["notice"] = notice
	c.Data["link"] = link
	c.Data["article"] = articles
	c.Data["tag"] = tags
	c.Data["top"] = top
	c.TplName = "index.html"
}
